const express = require("express");

const app = express();

app.get("/", function (req, res) {
  throw new Error("故意发生的错误");
  res.send("hello express - /");
});

app.get("/user", function (req, res) {
  // 模拟用户查询数据库
  setTimeout(() => {
    // throw new Error("故意发生的错误");
    // 异步代码中发生的错误, 不会被错误处理中间件捕获到
    // 解决方案: 将错误对象, 通过next()传递到错误处理中间件中
    next(new Error("故意发生的错误"));
  }, 1000);
});

// 错误处理中间件: 专门用来捕获处理路由和应用中间件中发生的错误
// 定义: 错误处理中间件, 必须定义4个参数: (err, req, res, next)
// 注意: 错误处理中间件, 必须注册在所有路由和中间件之后
app.use(function (err, req, res, next) {
  console.log("发生了错误:" + err.message);
  res.status(500).send("服务器内部错误-" + err.message);
});

// 3. 监听端口启动服务
app.listen(3000, function () {
  console.log("Express server is running at http://127.0.0.1:3000");
});
